/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Usuarios;

import Controladores.AsignacionpermisoJpaController;
import Controladores.TipousuarioJpaController;
import Entidades.Asignacionpermiso;
import Entidades.Permiso;
import Entidades.Tipousuario;
import Modelos.UsuariosModel;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

/** @Author: JEscalanteGT <jescalantegt@gmail.com> 
  *  Date: 3:30 pm 23/06/2013
  *  Branch: EquipoD
  **/ 
public class ManejoTiposUsuario {
    public void guardarRegistro(String nombre){
        if(registroExistente(nombre) == false){
            EntityManagerFactory emf = conexion.getInstancia().getEMF();
            TipousuarioJpaController tipoUsuarioController = new TipousuarioJpaController(emf);

            Tipousuario tipoUsuario = new Tipousuario();
            tipoUsuario.setNombre(nombre);
            tipoUsuarioController.create(tipoUsuario);
            System.out.println("Se ha ingresado el registro exitosamente");
        }
        else{
            System.out.println("Error, registro con el mismo nombre.");
        }
    }
    public List<Tipousuario> obtenerTiposUsuario(){
        List<Tipousuario> listado = new ArrayList();
        EntityManagerFactory emf = conexion.getInstancia().getEMF();
        EntityManager em = emf.createEntityManager();
        
        Query qr;
        qr = em.createNamedQuery("Tipousuario.findAll");
        listado = qr.getResultList();
         return listado; 
    }
    public List<Permiso> obtenerPermisos(){
        List<Permiso> listado = new ArrayList();
        EntityManagerFactory emf = conexion.getInstancia().getEMF();
        EntityManager em = emf.createEntityManager();
        
        Query qr;
        qr = em.createNamedQuery("Permiso.findAll");
        listado = qr.getResultList();
         return listado; 
    }
    public List<Permiso> obtenerListadoPermisos(Tipousuario registro){
        List<Permiso> listado = new ArrayList();
        List<Asignacionpermiso> listadoAsignacion = new ArrayList();
        EntityManagerFactory emf = conexion.getInstancia().getEMF();
        EntityManager em = emf.createEntityManager();
        Query qr;
        qr = em.createNamedQuery("Asignacionpermiso.findByTipoUsuario");
        qr.setParameter("TipoUsuario_idTipoUsuario", registro);
        listadoAsignacion = qr.getResultList();
        for(int i=0; i < listadoAsignacion.size(); i++){
            Permiso permiso = listadoAsignacion.get(i).getPermisoidPermiso();     
            listado.add(permiso);
        }
        return listado; 
    }
    public Tipousuario obtenerRegistroID(int idTipoUsuario){
        Tipousuario registro = new Tipousuario();
        EntityManagerFactory emf = conexion.getInstancia().getEMF();
        TipousuarioJpaController tipoUsuarioController = new TipousuarioJpaController(emf);
        registro = tipoUsuarioController.findTipousuario(idTipoUsuario);
        return registro;
    }
    public Boolean registroExistente(String nombre){
        Boolean existeRegistro = false;
        EntityManagerFactory emf = conexion.getInstancia().getEMF();
        EntityManager em = emf.createEntityManager();
        
        Query qr;
        qr = em.createNamedQuery("Tipousuario.findByNombre");
        qr.setParameter("nombre", nombre);
        List<Tipousuario> listadoTiposUsuario = qr.getResultList();
        if(listadoTiposUsuario.size()>0)
            existeRegistro = true;
        return existeRegistro;
    }
    public void agregarPermiso(Tipousuario tipoUsuario, Permiso permiso){
        EntityManagerFactory emf = conexion.getInstancia().getEMF();
        AsignacionpermisoJpaController asignacionPermisoController = new AsignacionpermisoJpaController(emf);
        
        Asignacionpermiso asignacionPermiso = new Asignacionpermiso();
        asignacionPermiso.setPermisoidPermiso(permiso);
        asignacionPermiso.setTipoUsuarioidTipoUsuario(tipoUsuario);
        asignacionPermisoController.create(asignacionPermiso);
        System.out.println("Se ha agregado un permiso a este tipo de usuario");
        
    }
    public Boolean poseeAcceso(Tipousuario tipoUsuario, String nombreComponente){
        Boolean acceso = false;
        Asignacionpermiso asignacionPermiso = new Asignacionpermiso();
        for(int i=0; i < tipoUsuario.getAsignacionpermisoCollection().size(); i++){
            asignacionPermiso = (Asignacionpermiso) tipoUsuario.getAsignacionpermisoCollection().toArray()[i];
            if(asignacionPermiso.getPermisoidPermiso().getNombreComponente().equals(nombreComponente) == true){
                acceso = true;
                break;
            }
        }
        
        return acceso;
    }
}
